#include "bsp_gpio.h"

/**
 * @brief  配置GPIO的速度、上下拉模式、输入输出模式、开漏推挽等状态.
 * @param  gpio_handle GPIO的外设描述结构体指针.
 * @param  alt_func  是否需要复用该IO
 * @author 巴桂阳
 * @date   2024/12/19
*/
void bsp_gpio_config(bsp_gpio_t *gpio_handle, gpio_alt_fun_e alt_func)
{
    rcu_periph_clock_enable(gpio_handle->rcu_clk);

    if(alt_func == ALT_FUN_EN)
    {
        gpio_af_set(gpio_handle->port, gpio_handle->alt_func, gpio_handle->pin);
    }    

    gpio_mode_set(gpio_handle->port, gpio_handle->mode, gpio_handle->pull, gpio_handle->pin);
    gpio_output_options_set(gpio_handle->port, gpio_handle->otype, gpio_handle->speed, gpio_handle->pin);
}

/**
 * @brief  置位GPIO
 * @param  gpio_handle GPIO的外设描述结构体指针.
 * @author 巴桂阳
 * @date   2024/12/27
*/
void bsp_gpio_set(bsp_gpio_t *gpio_handle)
{
    gpio_bit_set(gpio_handle->port, gpio_handle->pin);
}

/**
 * @brief  复位GPIO
 * @param  gpio_handle GPIO的外设描述结构体指针.
 * @author 巴桂阳
 * @date   2024/12/27
*/
void bsp_gpio_reset(bsp_gpio_t *gpio_handle)
{
    gpio_bit_reset(gpio_handle->port, gpio_handle->pin);
}
